Search CTRL + K

Visual Programming: Compositional visual reasoning without training

Tanmay Gupta, Aniruddha Kembhavi

CVPR 2023 (Best Paper)

符号主义的胜利!

VISPROG is a modular and interpretable neuro-symbolic system for compositional visual reasoning



$

seamless

符号主义

符号主义是一种学习理论,它认为人类的思维和认知过程可以通过符号和符号之间的关系来表示和解释。符号主义强调人类思维的抽象、逻辑和推理能力,认为人类通过对符号的操作和组合来进行思考和解决问题。

与符号主义相对应的是神经网络,它是一种模仿人脑神经系统结构和功能的计算模型。神经网络通过大量的节点(称为神经元)以及它们之间的连接来模拟信息处理。神经网络强调通过学习从输入到输出之间的模式识别和关联性。

两者之间的区别主要体现在以下几个方面:

  1. 表示方式:符号主义使用符号来表示知识和信息,而神经网络使用连接权重来表示信息。

  2. 知识表达:在符号主义中,知识通常以规则、公式或逻辑形式存在,而在神经网络中,知识以分布式表示存在于连接权重中。

  3. 学习方式:符号主义依赖于基于规则和逻辑的推理过程进行学习,而神经网络通过从数据中提取特征并调整连接权重来进行学习。

  4. 抽象能力:由于其基于逻辑和规则的特性,符号主义具有较强的抽象能力,可以进行逻辑推理和符号操作。而神经网络则更擅长于模式识别和关联性学习。

需要注意的是,符号主义和神经网络并不是完全对立的理论,而是在认知科学中两种不同的观点。实际上,现代研究往往将两者结合起来,以利用各自的优势来解决复杂的认知问题。

符号主义的历史

神经网络的发展可以追溯到20世纪40年代和50年代。早期的神经网络模型受到生物神经系统的启发,试图模拟人脑的工作原理。这些模型使用一系列人工神经元和连接权重来构建网络,通过学习调整连接权重来进行信息处理和模式识别。然而,由于当时计算能力的限制和缺乏足够的数据,神经网络的研究进展缓慢,直到20世纪80年代才有了一些重要的突破。

1986年,由于Hinton等人的工作,多层感知机(Multilayer Perceptron,简称MLP)的反向传播算法被重新发现,这一算法解决了多层神经网络训练的问题,使得神经网络的研究进入了新的阶段。从那时起,神经网络的研究和应用得到了迅速发展,涌现出了一系列重要的算法和架构,如卷积神经网络(Convolutional Neural Networks,简称CNN)和循环神经网络(Recurrent Neural Networks,简称RNN),它们在图像识别、语音识别、自然语言处理等领域取得了显著的成果。

与神经网络不同,符号主义是一种基于逻辑和符号推理的人工智能方法。它的起源可以追溯到20世纪50年代和60年代的人工智能研究。符号主义的核心思想是通过表示和处理符号来进行推理和问题求解。符号主义的代表性方法之一是专家系统,它使用规则和知识库来模拟人类专家的知识和推理过程。符号主义在早期人工智能研究中取得了一些成功,例如在象棋和其他棋类游戏中击败人类大师的Deep Blue。

然而,符号主义也面临着一些挑战和限制。符号主义方法在处理模糊和不确定性的问题上存在困难,且对大规模数据的处理能力较弱。这导致了20世纪80年代末和90年代初对神经网络的重新关注,以及神经网络和符号主义的一种融合方法的探索。

在近年来,随着计算能力的提升和大数据的普及,神经网络得到了更广泛的应用和研究,特别是深度学习的兴起。深度学习是一种基于神经网络的方法,通过多层次的非线性变换来学习和表示数据的特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了重大突破,推动了人工智能的快速发展。

总的来说,神经网络和符号主义在人工智能的发展历史中扮演了不同的角色。神经网络通过模拟神经系统的方式实现了一种基于数据驱动的学习和模式识别方法,而符号主义则强调逻辑和符号推理的方式进行问题求解。随着技术的进步和研究的深入,两者之间的融合和相互借鉴也成为了当前人工智能研究的一个重要方向。

第一个问题:这个领域究竟在做什么?

$

seamless

神经符号化

神经符号化(Neural-Symbolic)是一种集成了神经网络和符号推理的方法,旨在解决复杂问题,特别是涉及到符号知识和推理的问题。它的目标是将神经网络的学习能力与符号推理的表达能力相结合,以获得更强大的智能和推理能力。

在这个方法中,神经网络主要用于处理感知任务和模式识别。通过学习大量数据,它可以捕捉模式和关联。然而,神经网络在处理符号级别的知识表示和推理任务时存在一定的限制,例如逻辑推理、符号推理和知识表示。

为了克服这些限制,神经符号化使用神经网络来学习从原始数据到符号表示之间的映射,并利用符号推理技术来处理和推理符号级别的知识。这种集成方法可以应用于不同领域,如自然语言处理、知识图谱构建、推荐系统等,以提高系统的智能和推理能力。

神经符号化和符号主义的关系

神经符号化和符号主义是两种不同的方法论,但它们在某些方面存在关联和相互补充。

符号主义是一种基于逻辑和符号推理的方法,强调使用符号来表示知识和进行推理。它使用形式化的语言和规则来描述问题,并通过应用逻辑推理规则来解决问题。符号主义在人工智能早期起到了重要作用,但其在处理不确定性、模糊性和大规模数据方面存在一定的限制。

神经符号化试图将神经网络的学习能力与符号主义的表达能力相结合。它使用神经网络来学习从原始数据到符号表示之间的映射,并利用符号推理技术来处理和推理符号级别的知识。这样做可以克服传统符号主义方法中对于手动编码规则的依赖,并且可以从大规模数据中学习到更复杂的模式和关联。

因此,神经符号化可以看作是一种扩展了传统符号主义思想并加入了机器学习技术的方法。它旨在综合利用神经网络和符号推理的优势,以提高系统在处理复杂问题、涉及到符号知识和推理的问题时的智能和推理能力。

neural symbolic 做什么

字面意思就是把网络(neural)的东西和符号(symbolic)的东西结合起来,这个虽然听起来浅显,但是道理却很深刻。神经网络一个众所周知的问题是**神经网络没有符号推理能力。我们人是通过符号严谨推理的,并不是通过一个黑箱的神经网络。(1)光靠神经网络没有符号推理,比如 ChatGPT,虽然能够拥有非常强大的神经网络推理能力,但这种推理能力是不可控的,我们一个重要的发展目标是让神经网络可控化,**那么神经符号就能起到这一点。(2)如果光靠规则系统呢,比如传统的专家规则系统,则不具有很强大的泛化能力,并且编写规则系统的过程也是非常费力的

Neural-Symbolic 方法相对于传统方法具有几个优势:

1、结合了学习和推理能力:Neural-Symbolic 方法将神经网络的学习能力与符号推理的表达能力相结合,克服了传统方法中学习和推理之间的差距。这使得系统能够从大量数据中学习模式和关联,并在符号级别进行推理和推断。
2、处理不完整和噪声数据:传统方法在处理不完整和噪声数据时可能存在困难,而神经网络具有较强的容错性和鲁棒性,能够处理具有噪声和缺失信息的数据。Neural-Symbolic 方法利用神经网络的学习能力来提取数据中的模式和特征,并利用符号推理来处理不完整的信息和推断缺失的部分。
3、自适应性和灵活性:Neural-Symbolic 方法具有自适应性和灵活性,可以根据不同任务和领域的需求进行调整和扩展。神经网络部分可以通过训练来适应特定任务和数据,而符号推理部分可以根据领域知识和规则进行定制和调整,从而实现更灵活和可扩展的系统。
4、结合了概率和确定性:传统方法中的符号推理通常是基于确定性逻辑规则进行推断,而神经网络更倾向于基于概率模型进行学习和推理。Neural-Symbolic 方法能够结合概率和确定性的方法,既能处理不确定性和概率推理,又能进行精确的符号级别推理。
5、弥补了知识表达和推理的差距:传统方法中的知识表示和推理往往基于人工定义的规则和逻辑形式,而神经网络能够从数据中进行端到端的学习。Neural-Symbolic 方法能够弥补知识表示和推理之间的差距,通过神经网络学习数据中的模式和关联,并利用符号推理进行推断和推理。

第二个问题:这篇文章的主要贡献是什么?

Contributions by Authors

我们提出了 VISPROG,这是一种神经符号方法,用于在给定自然语言指令的情况下解决复杂且构成性的视觉任务。VISPROG 避免了任何特定任务的训练需求。相反,它利用大型语言模型的上下文学习能力**生成类似 Python 的模块化程序,然后执行这些程序以获得解决方案和全面且可解释的解释。生成的每行程序可以调用多种现成的计算机视觉模型、图像处理子例程或 Python 函数来生成中间输出,这些输出可能被程序的后续部分使用。我们在四个不同的任务上展示了 VISPROG 的灵活性,包括构成性的视觉问题回答、基于图像对的零样本推理、事实知识对象标记和语言引导的图像编辑。我们相信像 VISPROG 这样的神经符号方法是一个令人兴奋的途径,可以轻松有效地扩展 AI 系统的范围,以满足人们希望执行的复杂任务的需求。

example

本文的重点在于不需要在每个任务上分别去精调模型,而是借助了大语言模型的上下文学习能力。举个例子,给定一个提示语比如隐藏 Nicole 的脸,那么可以借助大语言模型去生成一个 program,比如利用 Facedet 去检测人脸,然后再利用 Select 做筛选,最后再用 Emoji 函数去隐去人脸,等等。

Implementation of a VISPROG module.

class VisProgModule():
  def __init__(self):
    # load a trained model; move to GPU

  def html(self,inputs: List,output: Any):
    # return an html string visualizing step I/O
      
  def parse(self,step: str):
    # parse step and return list of input values 
    # and variables, and output variable name

  def execute(self,step: str,state: Dict):
    inputs, input_var_names, output_var_name = \
      self.parse(step)

    # get values of input variables from state
    for var_name in input_var_names:
      inputs.append(state[var_name])
    
    # perform computation using the loaded model
    output = some_computation(inputs)
    
    # update state
    state[output_var_name] = output
    
    # visual summary of the step computation
    step_html = self.html(inputs,output)
    return output, step_html


Tasks


Modules currently supported in VISPROG.

GQA prompts

Knowledge tagging prompts

...